Angular-এ @Injectable
ডেকোরেটর একটি ক্লাসকে ইনজেকশনের জন্য প্রস্তুত করে। এটি মূলত Angular এর ডিপেন্ডেন্সি ইনজেকশন (DI) সিস্টেমের অংশ। যখন কোনো ক্লাসে @Injectable
ডেকোরেটর ব্যবহার করা হয়, তখন Angular জানে যে এই ক্লাসটিকে এক বা একাধিক কম্পোনেন্ট, সার্ভিস, বা ডিরেক্টিভে ইনজেক্ট করা যেতে পারে এবং Angular নিজে তার ইনস্ট্যান্স তৈরি করে সেগুলিতে সরবরাহ করবে।
@Injectable
ডেকোরেটরের ব্যবহার@Injectable
ডেকোরেটর ব্যবহার করা হয় যখন আপনি Angular এর DI সিস্টেমের মাধ্যমে সার্ভিস বা ক্লাস ইনজেক্ট করতে চান। এটি একটি ক্লাসের জন্য নির্ধারণ করে যে সেই ক্লাসটি Angular এর DI কন্টেইনারে নিবন্ধিত হবে এবং সেই ক্লাসের ইন্সট্যান্স অটোমেটিকভাবে কম্পোনেন্ট বা সার্ভিসে ইনজেক্ট হবে।
@Injectable
ডেকোরেটর ব্যবহার করা@Injectable
ডেকোরেটর সাধারণত সার্ভিস ক্লাসে ব্যবহৃত হয়, তবে এটি অন্য যেকোনো ক্লাসে ব্যবহার করা যেতে পারে যেটি DI মাধ্যমে সরবরাহ করতে চান।
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root' // 'root' নির্দেশ করে সার্ভিসটি পুরো অ্যাপ্লিকেশন জুড়ে একটি একক ইনস্ট্যান্স হিসেবে থাকবে
})
export class MyService {
constructor() { }
getGreeting(): string {
return "Hello from MyService!";
}
}
এখানে:
@Injectable()
ডেকোরেটরটি Angular কে জানিয়ে দেয় যে এই ক্লাসটি সার্ভিস হিসেবে ইনজেকশনযোগ্য।providedIn: 'root'
নির্দেশ করে যে সার্ভিসটি অ্যাপ্লিকেশনের একক (singleton) ইন্সট্যান্স হিসেবে ব্যবহৃত হবে এবং এটি অ্যাপ্লিকেশনের পুরো লাইফটাইম জুড়ে অ্যাক্সেসযোগ্য থাকবে।@Injectable
ডেকোরেটরের কনফিগারেশন@Injectable
ডেকোরেটরের মধ্যে providedIn
একটি অত্যন্ত গুরুত্বপূর্ণ কনফিগারেশন। এটি নির্ধারণ করে সার্ভিসটি কোথায় ব্যবহারযোগ্য হবে। এর বিভিন্ন মান হতে পারে:
providedIn: 'root'
: সার্ভিসটি অ্যাপ্লিকেশনের সমস্ত অংশে শেয়ার করা যাবে এবং এটি একক (singleton) হিসেবে ব্যবহৃত হবে।providedIn: 'any'
: সার্ভিসটি lazy-loaded মডিউলগুলির জন্য আলাদাভাবে তৈরি হবে। এটি তখন কেবলমাত্র সেই মডিউলে ব্যবহারযোগ্য হবে যেটি লোড হয়েছে।providedIn: 'platform'
: সার্ভিসটি অ্যাপ্লিকেশনের সার্বিক লাইফটাইমে একাধিক ইন্সট্যান্সে প্রদত্ত হবে, এটি সাধারণত অ্যাঙ্গুলারের গভীর সার্ভিসগুলোতে ব্যবহৃত হয়।providedIn: 'module'
: সার্ভিসটি শুধুমাত্র নির্দিষ্ট মডিউলে ইনজেক্ট করা হবে।@Injectable
ডেকোরেটরের কার্যকারিতা@Injectable
ডেকোরেটর মূলত Angular-কে জানিয়ে দেয় যে ওই ক্লাসটির জন্য ডিপেন্ডেন্সি ইনজেকশন ব্যবহার করা যাবে। যেহেতু সার্ভিস ক্লাস সাধারণত ডিপেন্ডেন্সি হিসেবে কাজ করে, Angular এই সার্ভিস ক্লাসের একটি ইন্সট্যান্স তৈরি করে এবং যখনই ওই সার্ভিসটি প্রয়োজন হয়, এটি কম্পোনেন্টে ইনজেক্ট করে দেয়।
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class UserService {
private users = ['John', 'Jane', 'Doe'];
getUsers() {
return this.users;
}
}
এখানে UserService
একটি সার্ভিস যা ব্যবহারকারীদের তালিকা সরবরাহ করে। এই সার্ভিসটি @Injectable
ডেকোরেটর দ্বারা ইনজেকশনযোগ্য করে তোলা হয়েছে এবং এটি root
এ providedIn
মান সহ মডিউলের মধ্যে উপলব্ধ।
কম্পোনেন্টে এই সার্ভিস ইনজেক্ট করতে:
import { Component } from '@angular/core';
import { UserService } from './user.service';
@Component({
selector: 'app-root',
template: `<h1>{{ users }}</h1>`
})
export class AppComponent {
users: string[];
constructor(private userService: UserService) {
this.users = this.userService.getUsers();
}
}
এখানে:
UserService
কে AppComponent
-এ ইনজেক্ট করা হয়েছে constructor
এর মাধ্যমে।UserService
এর ইন্সট্যান্স তৈরি করেছে এবং এটি AppComponent
-এ ইনজেক্ট করেছে।@Injectable
ডেকোরেটরটি একটি ক্লাসকে ইনজেকশনযোগ্য করে তোলে।providedIn
কনফিগারেশন ব্যবহার করে নির্ধারণ করা হয় সার্ভিসটি অ্যাপ্লিকেশনের কোথায় ইনজেক্ট হবে।Read more